import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * ServletConfig基本使用
 */
public class S9_DBServlet extends HttpServlet {

    /**
     * ServletConfig config 使用流程
     * 1.当 DBServlet 对象初始化时，会同时创建一个 ServletConfig 对象
     * 2.这时如果有DBServlet init() 方法中调用 super.init(config);
     * 3.调用父类的init(config)
     * public void init(ServletConfig config) throws ServletException {
     *         this.config = config;
     *         this.init();
     *     }
     *     这时就会把tomcat创建的 ServletConfig 对象赋给 GenericServlet的属性 config
     * 4.因此如果重写init()方法，记住如果想在其他方法通过 getServletConfig 获取 servletConfig
     *   一定要调用 super.init(config);
     * @param config
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 在 DBServlet 执行 doGet() 和 doPost() 时，可以获取到web.xml配置的用户名和密码
        // 借助现有的方法或对象来搞定
        // DBServlet 的父类 GenericServlet 有 getServletConfig()
        /*
            getServletConfig()返回的 servletConfig 对象 是 GenericServlet private transient ServletConfig config;
            当一个属性被 transient 修饰，表示该属性不会被串行化(重要信息不希望保存到文件)
         */
        ServletConfig servletConfig = super.getServletConfig();
        String username = servletConfig.getInitParameter("username");
        String password = servletConfig.getInitParameter("pwd");
        System.out.println("初始化参数username= " + username);
        System.out.println("初始化参数pwd= " + password);
    }
}
